home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Topik / Topik - Disk 14 - Useful Commands (19xx)(Topik Public Domain)(PD)[WB].zip / Topik - Disk 14 - Useful Commands (19xx)(Topik Public Domain)(PD)[WB].adf / ExtractFont / ExtractFont.doc < prev    next >
Text File  |  1989-08-07  |  5KB  |  148 lines

  1.  
  2. *** TOPIK Note : All the files referred to by this text file can be found in
  3. this directory, accessible from the CLI.
  4.  
  5.  
  6.  
  7.  
  8. EXTRACTFONT 1.2 (see note at bottom of docs)
  9.  
  10.    This program will take any standard Amiga font and
  11. create a C Source file so that the font may be used
  12. without having to appear in the user's FONTS:
  13. directory.
  14.    I personally feel this is the way most programs
  15. should operate.  The Only programs that should require
  16. fonts in the FONTS: directory are programs that let
  17. the user choose and use fonts (ie. Graphics and
  18. WYSIWYG style Word Processing programs.)
  19.   The problem with programs that require certain fonts
  20. in the user's FONTS: directory are two fold.  First,
  21. if every program needs a specific font in the user's
  22. FONTS: directory that directory could get very large
  23. and too large for even one disk.  Second, many users
  24. including myself boot from many different boot disks
  25. and it is unreasonable to force the user to either put
  26. your fonts on each of his boot disks or to always boot
  27. from a particular disk when running your program.
  28.  
  29.    Enter EXTRACTFONT.  The program will take any
  30. standard Amiga font and create a C source file that
  31. you can compile and link with your program so that
  32. your fonts are part of your program.
  33.    I have included an example program.  TEST.c  TEST.c
  34. links with a file called SMALL.c that was generated
  35. with EXTRACTFONT.  TEST.c opens a window and prints
  36. some text into that window with the SMALL.font.  Most
  37. program will work this way.
  38.    If you have a multi-tasking type program that needs
  39. to use the same font across tasks then you must
  40. allocate PUBLIC memory and copy the font to this
  41. public memory.  Then call AddFont() to make the font
  42. part of the System's list of fonts.  To use it in
  43. other tasks just call OpenFont and not OpenDiskFont
  44. since it is already in memory.  Aternatively, if you
  45. other tasks/programs open screens just set the
  46. NewScreen.Font to point to a valid TextAttr structure
  47. for your font and your screen will be using the font.
  48. When you are done with the font you can call RemFont()
  49. to remove it from the System's list of fonts.
  50.  
  51.  
  52. Example of multi-program font use.
  53.  
  54. Master Program---
  55.  
  56. ...
  57. /* Font data */
  58.    extern   struct TextFont SmallFont;
  59.    struct   TextFont   *MainFont = 0;
  60.  
  61.    if (!( MainFont = AllocMem (SmallFont.tf_Message.mn_Length, MEMF_PUBLIC)))
  62.       Quit ("Couldn't allocate memory for font");
  63.    CopyMem (&SmallFont, MainFont, SmallFont.tf_Message.mn_Length);
  64.    AddFont (MainFont);
  65.  
  66.    /* Startup subordinate task or program */
  67.  
  68.    /* When all subordinate tasks and programs are done as and
  69.            you are ready to exit... */
  70.  
  71.    if (MainFont)      RemFont (MainFont);
  72. ....
  73.  
  74.  
  75. Subordinate Program
  76. ....
  77. struct Screen *MainScreen = 0;
  78.  
  79. struct TextAttr NormFont = {
  80.    (UBYTE *)"small.font",   /* Font Name      */
  81.    5,         /* Font Height      */
  82.    FS_NORMAL,      /* Style      */
  83.    FPF_DESIGNED };      /* Preferences      */
  84.  
  85. struct NewScreen NewScreen = {
  86.    0, 0,         /* Left, Top Edge      */
  87.    320,200,      /* Width, Height      */
  88.    5,         /* Depth         */
  89.    0, 0,         /* DetailPen, BlockPen      */
  90.    NULL,         /* Display Modes      */
  91.    CUSTOMSCREEN|CUSTOMBITMAP, /* Screen Type      */
  92.    &NormFont,      /* Font            */
  93.    NULL,         /* Title         */
  94.    NULL,         /* Screen Gadgets      */
  95.    NULL,         /* CustomBitMap         */
  96. };
  97.  
  98. MainScreen = OpenScreen (&NewScreen);
  99.  
  100. /* Screen and therefore all windows on this screen are now using the your
  101.    font. */
  102.  
  103. ----or----
  104.  
  105. struct TextFont *YourFont = 0;
  106.  
  107. struct TextAttr NormFont = {
  108.    (UBYTE *)"small.font",   /* Font Name      */
  109.    5,         /* Font Height      */
  110.    FS_NORMAL,      /* Style      */
  111.    FPF_DESIGNED };      /* Preferences      */
  112.  
  113. YourFont = OpenFont (&NormFont);
  114.  
  115. /* Now you can set your RastPort(s) to use the font */
  116.  
  117. SetFont (YourRastPort, YourFont);
  118.  
  119. /* When your done and exiting this task/program you must */
  120.  
  121. CloseFont (YourFont);
  122.  
  123.  
  124.  
  125.  
  126. Good Luck!
  127.      Gregg Tavares
  128.      3332 Mentone Ave #8
  129.      Los Angeles, CA 90034
  130.  
  131.      CIS: 72411,2772
  132.      PeopleLink: GreggT
  133.  
  134.  
  135.  
  136. Note: The orignal version of this program had a
  137. "bug".  I had assumed (don't ask me why) that all
  138. fonts required Space and Kern fields even if they
  139. were Fixed-Width fonts.  Well I was wrong.  That
  140. assumption has been fixed and the program should now
  141. work with all your fonts.  (excluding ColorFonts).
  142.   Also, someone (sorry I forgot to note your name)
  143. suggested I make many of the font parts "static" so
  144. that you can include many fonts in one program
  145. without having to edit the 'C' source files created
  146. by EXTRACTFONT.  Well I had added this suggestion and
  147. it works well.  Thank you to whomever suggested it.
  148.